package h1.sismetro.negocio.itensManutencao;

import h1.sismetro.classesbasicas.Local;
import h1.sismetro.dao.RepositorioLocalJDBC;
import h1.sismetro.exceptions.AcessoAoBancoException;
import h1.sismetro.exceptions.ConexaoComBancoException;
import h1.sismetro.exceptions.LocalJaCadastradoException;
import h1.sismetro.exceptions.LocalNaoEncontradoException;
import h1.sismetro.exceptions.NenhumLocalCadastradoException;

import java.util.List;

public class CadastroLocal implements ICadastroLocal {

	
	private RepositorioLocalJDBC repositorioLocal;
	
	public CadastroLocal(){
		this.repositorioLocal = new RepositorioLocalJDBC();
	}
	
	public CadastroLocal(RepositorioLocalJDBC repositorio){
		this.repositorioLocal = repositorio;
	}

	//@Override
	public void alterar(Local novoLocal) throws AcessoAoBancoException, ConexaoComBancoException, LocalNaoEncontradoException {
		if(this.repositorioLocal.existe(novoLocal.getIdentificador())){
			this.repositorioLocal.atualizar(novoLocal);
		}else{
			LocalNaoEncontradoException e =
				new LocalNaoEncontradoException(novoLocal.getIdentificador());
			throw e;
		}
	}

	//@Override
	public void cadastrar(Local novoLocal) throws AcessoAoBancoException, ConexaoComBancoException, LocalJaCadastradoException {
		if(!this.repositorioLocal.existe(novoLocal.getIdentificador())){
			this.repositorioLocal.inserir(novoLocal);
		}else{
			LocalJaCadastradoException e =
				new LocalJaCadastradoException(novoLocal.getIdentificador());
			throw e;
		}	
	}

	
	//@Override
	public void excluir(String identificador) throws AcessoAoBancoException, ConexaoComBancoException, LocalNaoEncontradoException {
		if(this.repositorioLocal.existe(identificador)){
			this.repositorioLocal.remover(identificador);
		}else{
			LocalNaoEncontradoException e =
				new LocalNaoEncontradoException(identificador);
			throw e;
		}
	}
	
	
	//@Override
	public boolean existe(String identificador) throws AcessoAoBancoException, ConexaoComBancoException {		
		return this.repositorioLocal.existe(identificador);
	}

	//@Override
	public List<Local> imprimir() throws AcessoAoBancoException, ConexaoComBancoException, NenhumLocalCadastradoException {
		if(!(this.repositorioLocal.listar().size() <= 0)){
			return this.repositorioLocal.listar();
		}else{
			NenhumLocalCadastradoException e = 
				new NenhumLocalCadastradoException();
			throw e;
		}
		
	}

	//@Override
	public Local recuperar(String identificador) throws AcessoAoBancoException, ConexaoComBancoException, LocalNaoEncontradoException {		
		if(this.repositorioLocal.existe(identificador)){
			return this.repositorioLocal.localizar(identificador);
		}else{
			LocalNaoEncontradoException e =
				new LocalNaoEncontradoException(identificador);
			throw e;
		}
		
	}
	
	
}
